package com.cyz.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cyz.model.dto.space.SpaceAddRequest;
import com.cyz.model.dto.space.SpaceQueryRequest;
import com.cyz.model.entity.Space;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cyz.model.entity.User;
import com.cyz.model.vo.SpaceVO;

import javax.servlet.http.HttpServletRequest;


public interface SpaceService extends IService<Space> {

    /**
     * 添加空间
     * @param spaceAddRequest   添加空间请求
     * @return  空间id
     */
    Long addSpace(SpaceAddRequest spaceAddRequest, User loginUser);

    /**
     * 空间校验（更添加和修改空间时用到）
     *
     * @param space 空间信息
     * @param add   是否是增加
     */
    void validSpace(Space space, boolean add);


    /**
     *  根据Id删除空间
     * @param spaceId   空间Id
     * @param request   请求
     */
    void deleteSpaceById(Long spaceId, HttpServletRequest request);

    /**
     * 获取脱敏后的空间信息(单条)
     *
     * @param space 未脱敏的空间信息
     * @return 脱敏后的信息
     */
    SpaceVO getSpaceVO(Space space, HttpServletRequest request);

    /**
     * 获取脱敏后的空间信息(多条)
     *
     * @param spacePage 未脱敏的空间信息
     * @return 脱敏后的信息
     */
    Page<SpaceVO> getSpaceVOPage(Page<Space> spacePage, HttpServletRequest request);

    /**
     * 将查询请求转换成mp的查询条件
     *
     * @param spaceQueryRequest 查询请求
     * @return 查询条件
     */
    QueryWrapper<Space> getQueryWrapper(SpaceQueryRequest spaceQueryRequest);

    /**
     * 根据空间级别添加空间大小
     * @param space 添加的空间信息
     */
    void fillSpaceBySpaceLevel(Space space);

}
